# -*- coding: Latin-1 -*-
#!/usr/bin/env python
'''
Created on 23/08/2012

@author: nmedina
'''
import ConfigParser
from Crypto.Cipher import AES
import base64
PADDING = '{'
BLOCK_SIZE = 32
class ArchivosDeConfiguracion():
    def __init__(self):
        self.__ArchivoConfiguracion = ConfigParser.ConfigParser()
    
    def AbrirArchivo(self,RutaArchivo):
        if len(self.__ArchivoConfiguracion.read(RutaArchivo)) > 0:
            return True
        else:
            self.__CrearArchivoConfiguracion(RutaArchivo) 
            return True
    def __CrearArchivoConfiguracion(self,NombreArchivo):
        secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        cipher = AES.new(secret)
        Config = ConfigParser.ConfigParser()
        Config.read(NombreArchivo)
        Config.add_section("Proxy")
        Config.add_section("ServidorWeb")
        Config.add_section("ServidorCorreo")
        Config.add_section("Usuario")
        
        Config.set("Proxy","Direccion",self.__Encriptar(cipher,"0.0.0.0"))
        Config.set("Proxy","Puerto","")
        Config.set("Proxy","User","")
        Config.set("Proxy","Pass","")
        Config.set("Proxy","ConProxy",self.__Encriptar(cipher,"0"))
        
        Config.set("ServidorWeb","urlWS","")
        Config.set("ServidorWeb","ServidorWeb2Py",self.__Encriptar(cipher,"False"))
        Config.set("ServidorWeb","ServidorNet",self.__Encriptar(cipher,"True"))
        Config.set("ServidorWeb","NameSpace",self.__Encriptar(cipher,"www.osplad.org"))
        Config.set("ServidorWeb","Reintentos",self.__Encriptar(cipher,"1"))
        Config.set("ServidorWeb","Host",self.__Encriptar(cipher,"0.0.0.0"))
        
        Config.set("ServidorCorreo","CorreoEntrante(POP3)","")
        Config.set("ServidorCorreo","PuertoCorreoEntrante",self.__Encriptar(cipher,"105"))
        Config.set("ServidorCorreo","CorreoSaliente(SMTP)","")
        Config.set("ServidorCorreo","PuertoCorreoSaliente",self.__Encriptar(cipher,"25"))
        Config.set("ServidorCorreo","Cuenta","")
        Config.set("ServidorCorreo","Pass","")
        
        Config.set("Usuario","Recordar",self.__Encriptar(cipher,"False"))
        Config.set("Usuario","NombreUsuario",self.__Encriptar(cipher,"Usuario"))
        Config.set("Usuario","Password",self.__Encriptar(cipher,""))
        
        Archivo = open(NombreArchivo,"w")
        Config.write(Archivo)
        Archivo.close()
    def GetSeccion(self,Seccion,Clave):
        secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        cipher = AES.new(secret)
        return self.__Desencriptar(cipher,self.__ArchivoConfiguracion.get(Seccion,Clave))
    def SetSeccion(self,Archivo,seccion,clave,valor):
        secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        cipher = AES.new(secret)
        self.__ArchivoConfiguracion.set(seccion,clave,self.__Encriptar(cipher,valor))
        file = open(Archivo,"w")
        self.__ArchivoConfiguracion.write(file)
        file.close()
    def __Encriptar(self,c,s):
        StrEncryp = base64.b64encode(c.encrypt(self.__GetPad(s)))
        return StrEncryp

    def __Desencriptar(self,c,e):
        Resp = c.decrypt(base64.b64decode(e)).rstrip(PADDING)
        return Resp
    def __GetPad(self,s):
        Resp = s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
        return Resp